﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FinanSoft.BusinessLayer;
using FinanSoft.Entities;
using FinanSoft.Utilities;
using System.Xml;
namespace FinanSoft
{
    public partial class frmCrearEmpresa : Form
    {

        private Company _companyCreated;

        public frmCrearEmpresa(Company companyCreated)
        {
            InitializeComponent();
            _companyCreated = companyCreated;
            txtEmpresa.Enabled = false;
            txtEmpresa.Text = _companyCreated.Name;
        }


        public String[] generarArreglo() 
        {
            String[] arryElements;
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(Constants.DIRECTORY_COMPANIES);

            XmlNodeList Empresas = xDoc.GetElementsByTagName(Constants.TAG_COMPANIES);
            XmlNodeList compañia = ((XmlElement)Empresas[0]).GetElementsByTagName(Constants.TAG_COMPANY);
            arryElements = new String[compañia.Count * 2];
            int i = 0;
            foreach (XmlNode nodo in compañia)
            {

                arryElements[i] = nodo.Attributes.GetNamedItem(Constants.TAG_COMPANY_NAME).InnerText;
                arryElements[i + 1] = nodo.Attributes.GetNamedItem(Constants.TAG_COMPANY_DATA_BASE).InnerText;
                i = i + 2;

            }
            return arryElements;
        }

        private void frmCrearEmpresa_Load(object sender, EventArgs e)
        {

        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (createCompany())
            {
                // Leemos el archivo
                String[] arreglo = generarArreglo();

                // Se escribe el archivo y ademas se añade la nueva compañía.
                // Luego creamos el archivo con la compañía seleccionada y con su base de datos.
                XmlDocument doc = new XmlDocument();
                XmlNode Empresas = doc.CreateElement("Empresas");
                doc.AppendChild(Empresas);
                int m = 0;
                for (int k = 0; k < ((arreglo.Length / 2) + 1); k++)
                {
                    if (k == (arreglo.Length / 2))
                    {
                        XmlNode Compania = doc.CreateElement(Constants.TAG_COMPANY);
                        XmlAttribute atributoNombre = doc.CreateAttribute(Constants.TAG_COMPANY_NAME);
                        atributoNombre.InnerText = txtEmpresa.Text;
                        Compania.Attributes.Append(atributoNombre);
                        XmlAttribute atributoBaseDatos = doc.CreateAttribute(Constants.TAG_COMPANY_DATA_BASE);
                        atributoBaseDatos.InnerText = txtBD.Text;
                        Compania.Attributes.Append(atributoBaseDatos);
                        Empresas.AppendChild(Compania);
                    }
                    else
                    {
                        XmlNode Compania = doc.CreateElement(Constants.TAG_COMPANY);
                        XmlAttribute atributoNombre = doc.CreateAttribute(Constants.TAG_COMPANY_NAME);
                        atributoNombre.InnerText = arreglo[m];
                        Compania.Attributes.Append(atributoNombre);
                        XmlAttribute atributoBaseDatos = doc.CreateAttribute(Constants.TAG_COMPANY_DATA_BASE);
                        atributoBaseDatos.InnerText = arreglo[m + 1];
                        Compania.Attributes.Append(atributoBaseDatos);
                        Empresas.AppendChild(Compania);
                        m = m + 2;
                    }
                }
                doc.Save(Constants.DIRECTORY_COMPANIES);
                MessageBox.Show(MessageConstants.COMPANY_CREATED, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Information);
                Close();
            }
        }

        private bool createCompany()
        {
            if (validateInformation())
            {
                String oldBD = AppConfigReader.GetInstance().DataBaseName;
                AppConfigReader.GetInstance().DataBaseName = txtBD.Text;
                User administrator = new User();
                administrator.NombreUsuario = usernameBox.Text;
                administrator.Nombre = adminNameBox.Text;
                if (ReportManager.GetInstance().CreateCompany(_companyCreated, administrator, passBox.Text))
                    return true;
                MessageBox.Show(ReportManager.GetInstance().ErrorMessage, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return false;
        }

        private bool validateInformation()
        {
            if (txtBD.Text.Trim().Length > 0 && adminNameBox.Text.Trim().Length > 0 && usernameBox.Text.Trim().Length > 0 && passBox.Text.Trim().Length > 0 && passVerifBox.Text.Trim().Length > 0)
                if (passVerifBox.Text.Equals(passBox.Text))
                    return true;
                else
                    MessageBox.Show(MessageConstants.VERIFICATION_PASSWORD_FAILED, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
                MessageBox.Show(MessageConstants.COMPANY_INFORMATION_MISSING, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return false;
        }

        private void cmbPeriodos_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void cmbTemporadas_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void txtTemporada_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
